package com.x8.mt.controller;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.x8.mt.common.GlobalMethodAndParams;
import com.x8.mt.common.Log;
import com.x8.mt.common.PageParam;
import com.x8.mt.entity.Connectinfo;
import com.x8.mt.entity.Datasource_connectinfo;
import com.x8.mt.entity.Metadata_relationtable;
import com.x8.mt.entity.Sourcesystem;
import com.x8.mt.service.ConnectinfoService;
import com.x8.mt.service.Datasource_connectinfoService;
import com.x8.mt.service.ETLJobService;
import com.x8.mt.service.Metadata_relationtableService;
import com.x8.mt.service.Metadata_tablefieldmappingService;
import com.x8.mt.service.SourcesystemService;

@CrossOrigin(origins = "*", maxAge = 3600)
// 解决跨域请求的注解
@Controller
@RequestMapping(value = "/sourcesystem")
public class SourcesystemController {
	@Resource
	SourcesystemService sourcesystemService;
	@Resource
	Datasource_connectinfoService datasource_connectinfoService;
	@Resource
	ConnectinfoService connectinfoService;
	@Resource
	Metadata_relationtableService metadata_relationtableService;
	@Resource
	ETLJobService etlJobService;
	@Resource
	Metadata_tablefieldmappingService metadata_tablefieldmappingService;
	
	/**
	 * 
	 * 作者:itcoder 
	 * 时间:2018年1月22日 
	 * 作用:获取所有的getSourcesystemsList数据（获取四级侧边栏菜单树数据） 
	 * 参数:
	 */
	@RequestMapping(value = "/getSourcesystemsList", method = RequestMethod.GET)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "获取所有的getSourcesystemsList数据（获取四级侧边栏菜单树数据） ")
	public JSONObject getSourcesystemsList(HttpServletRequest request,
			HttpServletResponse response) {
		JSONObject responsejson = new JSONObject();
		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);

		JSONArray data = new JSONArray();
		int count = 0;
		
		//获得业务系统，数据仓库，ETL等节点列表
		List<Sourcesystem> sourcesystemlist = sourcesystemService
				.getAllSourcesystems();
		//遍历业务系统，然后获取一级子系统列表
		for (Sourcesystem sourcesystem : sourcesystemlist) {
			//业务系统那一级 parentid为空
			if(sourcesystem.getParentid()==null){
				//一级列表JSONObject对象
				JSONObject zeroJson = new JSONObject();
				zeroJson.put("id", sourcesystem.getId());
				zeroJson.put("label", sourcesystem.getName());
				zeroJson.put("flag", "system");
				JSONArray zeroChild = new JSONArray();//在一级子系统列表中相当于data
				
				//计数器加一
				count++;
				//获得一级子系统列表
				List<Sourcesystem> oneList = sourcesystemService.getAllSourcesystemsByParentId(sourcesystem.getId());
				if(oneList!=null){
					
					//遍历一级子系统列表
					for (Sourcesystem oneSourceSystem : oneList) {
						//二级列表JSONObject对象
						JSONObject oneJson = new JSONObject();
						oneJson.put("id", oneSourceSystem.getId());
						oneJson.put("label", oneSourceSystem.getName());
						oneJson.put("flag", "system");
						JSONArray oneChild = new JSONArray();
						
						//ETL对应下的数据库列表
						if(oneSourceSystem.getName().equals("kettle数据集成")){

//							List<Integer> targetIdList = etlJobService.queryTargetTableId();
//							if(targetIdList!=null){
//								for (Integer integer : targetIdList) {
//									String mappingName = metadata_relationtableService.getMetadata_relationtableByid(integer).getName();
//									JSONObject treeNode = new JSONObject();
//									treeNode.put("id", integer);
//									treeNode.put("label", mappingName);
//									treeNode.put("flag", "mapping");
//									oneChild.add(treeNode);
//								}
//							}
							oneJson.put("children", oneChild);
							zeroChild.add(oneJson);
							zeroJson.put("children", zeroChild);
							data.add(zeroJson);
							
							responsejson.put("result", true);
							responsejson.put("data", data);
							responsejson.put("count", count);
							return responsejson;
						}
						
						//计数器加一
						count++;
						//获得二级子系统列表
						List<Sourcesystem> twoList = sourcesystemService.getAllSourcesystemsByParentId(oneSourceSystem.getId());
						if(twoList!=null){
							
							//遍历二级子系统列表
							for (Sourcesystem twoSourceSystem : twoList) {
								//三级列表JSONObject对象
								JSONObject twoJson = new JSONObject();
								twoJson.put("id", twoSourceSystem.getId());
								twoJson.put("label", twoSourceSystem.getName());
								twoJson.put("flag", "system");
								JSONArray twoChild = new JSONArray();
								
								//计数器加一
								count++;
								//查询二级子系统下是否有数据库，有，则查询connectinfo表获取数据库列表
								List<Connectinfo> oneDataBaseList = connectinfoService.getConnectinfoListByparentid(twoSourceSystem.getId());
								//不为空，则遍历datasource_connectinfo表，获取每个connectinfo记录对应的数据库名称
								if(oneDataBaseList!=null){
									for (Connectinfo connectinfo : oneDataBaseList) {
										//获得connectinfo表对应的datasource_connectinfo表记录
										Datasource_connectinfo datasource_connectinfo = datasource_connectinfoService.getDatasource_connectinfoListByparentid(connectinfo.getId());
										//一级数据库列表JSONObject对象
										JSONObject oneDBJson = new JSONObject();
										oneDBJson.put("id", connectinfo.getId());
										oneDBJson.put("label", datasource_connectinfo.getDatabasename());
										oneDBJson.put("flag", "database");
										twoChild.add(oneDBJson);
										
										//计数器加一
										count++;
									}
								}
								//获得三级子系统列表
								List<Sourcesystem> threeList = sourcesystemService.getAllSourcesystemsByParentId(twoSourceSystem.getId());
								if(threeList!=null){
									
									//遍历三级子系统
									for (Sourcesystem threeSourceSystem : threeList) {
										//四级列表JSONObject对象
										JSONObject threeJson = new JSONObject();
										threeJson.put("id", threeSourceSystem.getId());
										threeJson.put("label", threeSourceSystem.getName());
										threeJson.put("flag", "system");
										JSONArray threeChild = new JSONArray();
										
										//计数器加一
										count++;
										//查询三级子系统下是否有数据库，有，则查询connectinfo表获取数据库列表
										List<Connectinfo> twoDataBaseList = connectinfoService.getConnectinfoListByparentid(threeSourceSystem.getId());
										//不为空，则遍历datasource_connectinfo表，获取每个connectinfo记录对应的数据库名称
										if(twoDataBaseList!=null){
											for (Connectinfo connectinfo : twoDataBaseList) {
												//获得connectinfo表对应的datasource_connectinfo表记录
												Datasource_connectinfo datasource_connectinfo = datasource_connectinfoService.getDatasource_connectinfoListByparentid(connectinfo.getId());
												//二级数据库列表JSONObject对象
												JSONObject twoDBJson = new JSONObject();
												twoDBJson.put("id", connectinfo.getId());
												twoDBJson.put("label", datasource_connectinfo.getDatabasename());
												twoDBJson.put("flag", "database");
												threeChild.add(twoDBJson);
												
												//计数器加一
												count++;
											}
										}
										//获得四级子系统列表
										List<Sourcesystem> fourList = sourcesystemService.getAllSourcesystemsByParentId(threeSourceSystem.getId());
										if(fourList!=null){
											
											//遍历四级子系统列表
											for (Sourcesystem fourSourceSystem : fourList) {
												//计数器加一
												count++;
												//封装数据
												JSONObject fourJson = new JSONObject();
												fourJson.put("id", fourSourceSystem.getId());
												fourJson.put("label", fourSourceSystem.getName());
												fourJson.put("flag", "system");
												threeChild.add(fourJson);
												
											}
										}
										threeJson.put("children", threeChild);
										twoChild.add(threeJson);
									}
								}
								twoJson.put("children", twoChild);
								oneChild.add(twoJson);
							}
						}
						oneJson.put("children", oneChild);
						zeroChild.add(oneJson);
					}
				}
				zeroJson.put("children", zeroChild);
				data.add(zeroJson);
			}
		}

		responsejson.put("result", true);
		responsejson.put("data", data);
		responsejson.put("count", count);
		return responsejson;
	}
	
	public void getNodeTree(JSONArray data,int count){
		
	}
	
//	/**
//	 * 
//	 * 作者:itcoder 
//	 * 时间:2018年1月16日 
//	 * 作用:获取元数据所属的五级结构（获取五级侧边栏菜单树数据） 
//	 * 样例：
//	 * 		业务系统
//	 *			一级子系统
//	 *				二级子系统
//	 *					数据库
//	 *		
//	 *					三级子系统
//	 *					
//	 *						数据库
//	 *						四级子系统
//	 * "id": 5,
//     * "label": "业务系统",
//     * "children": [...]
//	 */
//	@RequestMapping(value = "/getFiveMetamodelHierarchyList", method = RequestMethod.GET)
//	@ResponseBody
//	@Log(operationType = "sourcesystem", operationDesc = "获取元数据所属的五级结构（获取五级侧边栏菜单树数据）  ")
//	public JSONObject getFiveMetamodelHierarchyList(HttpServletRequest request,
//			HttpServletResponse response) {
//		JSONObject responsejson = new JSONObject();
//		// if(!GlobalMethodAndParams.checkLogin()){
//		// responsejson.put("result", false);
//		// responsejson.put("count",0);
//		// return responsejson;
//		// }
//		GlobalMethodAndParams.setHttpServletResponse(request, response);
//
//		JSONArray data = new JSONArray();
//		int count = 0;
//		
//		data = getNodeTree(data);
//
//		responsejson.put("result", true);
//		responsejson.put("data", data);
//		responsejson.put("count", count);
//		return responsejson;
//	}
	
	/**
	 * 
	 * 作者:itcoder 
	 * 时间:2018年1月16日 
	 * 作用:获取元数据所属的五级结构（获取五级侧边栏菜单树数据） 
	 * 样例：
	 * 		业务系统
	 *			一级子系统
	 *				二级子系统
	 *					数据库
	 *		
	 *					三级子系统
	 *					
	 *						数据库
	 *						四级子系统
	 * "id": 5,
     * "label": "业务系统",
     * "children": [...]
	 */
	@RequestMapping(value = "/getFourMetamodelHierarchyList", method = RequestMethod.GET)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "获取元数据所属的五级结构（获取五级侧边栏菜单树数据）  ")
	public JSONObject getFourMetamodelHierarchyList(HttpServletRequest request,
			HttpServletResponse response) {
		JSONObject responsejson = new JSONObject();
		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);

		JSONArray data = new JSONArray();
		int count = 0;
		
		//获得业务系统，数据仓库，ETL等节点列表
		List<Sourcesystem> sourcesystemlist = sourcesystemService
				.getAllSourcesystems();
		//遍历业务系统，然后获取一级子系统列表
		for (Sourcesystem sourcesystem : sourcesystemlist) {
			//业务系统那一级 parentid为空
			if(sourcesystem.getParentid()==null){
				//一级列表JSONObject对象
				JSONObject zeroJson = new JSONObject();
				zeroJson.put("id", sourcesystem.getId());
				zeroJson.put("label", sourcesystem.getName());
				zeroJson.put("flag", "system");
				JSONArray zeroChild = new JSONArray();//在一级子系统列表中相当于data
				
				//计数器加一
				count++;
				//获得一级子系统列表
				List<Sourcesystem> oneList = sourcesystemService.getAllSourcesystemsByParentId(sourcesystem.getId());
				if(oneList!=null){
					
					//遍历一级子系统列表
					for (Sourcesystem oneSourceSystem : oneList) {
						//二级列表JSONObject对象
						JSONObject oneJson = new JSONObject();
						oneJson.put("id", oneSourceSystem.getId());
						oneJson.put("label", oneSourceSystem.getName());
						oneJson.put("flag", "system");
						JSONArray oneChild = new JSONArray();
						

						//ETL对应下的数据库列表
						if(oneSourceSystem.getName().equals("kettle数据集成")){

							List<Integer> targetIdList = etlJobService.queryTargetTableId();
							if(targetIdList!=null){
								for (Integer integer : targetIdList) {
									String mappingName = metadata_relationtableService.getMetadata_relationtableByid(integer).getName();
									JSONObject treeNode = new JSONObject();
									treeNode.put("id", integer);
									treeNode.put("label", mappingName);
									treeNode.put("flag", "mapping");
									oneChild.add(treeNode);
								}
							}
							oneJson.put("children", oneChild);
							zeroChild.add(oneJson);
							zeroJson.put("children", zeroChild);
							data.add(zeroJson);
							
							responsejson.put("result", true);
							responsejson.put("data", data);
							responsejson.put("count", count);
							return responsejson;
						}
						
						
						//计数器加一
						count++;
						//获得二级子系统列表
						List<Sourcesystem> twoList = sourcesystemService.getAllSourcesystemsByParentId(oneSourceSystem.getId());
						if(twoList!=null){
							
							//遍历二级子系统列表
							for (Sourcesystem twoSourceSystem : twoList) {
								//三级列表JSONObject对象
								JSONObject twoJson = new JSONObject();
								twoJson.put("id", twoSourceSystem.getId());
								twoJson.put("label", twoSourceSystem.getName());
								twoJson.put("flag", "system");
								JSONArray twoChild = new JSONArray();
								
								//计数器加一
								count++;
								//查询二级子系统下是否有数据库，有，则查询connectinfo表获取数据库列表
								List<Connectinfo> oneDataBaseList = connectinfoService.getConnectinfoListByparentid(twoSourceSystem.getId());
								//不为空，则遍历datasource_connectinfo表，获取每个connectinfo记录对应的数据库名称
								if(oneDataBaseList!=null){
									for (Connectinfo connectinfo : oneDataBaseList) {
										//获得connectinfo表对应的datasource_connectinfo表记录
										Datasource_connectinfo datasource_connectinfo = datasource_connectinfoService.getDatasource_connectinfoListByparentid(connectinfo.getId());
										//一级数据库列表JSONObject对象
										JSONObject oneDBJson = new JSONObject();
										oneDBJson.put("id", connectinfo.getId());
										oneDBJson.put("label", datasource_connectinfo.getDatabasename());
										oneDBJson.put("flag", "database");
										JSONArray children = new JSONArray();
										List<Metadata_relationtable> metadata_relationtableList = metadata_relationtableService.getMetadata_relationtableBydatasourceid(connectinfo.getId());
										if(metadata_relationtableList!=null){
											for (Metadata_relationtable metadata_relationtable : metadata_relationtableList) {
												JSONObject tableNode = new JSONObject();
												tableNode.put("id", metadata_relationtable.getId());
												tableNode.put("label", metadata_relationtable.getName());
												tableNode.put("flag", "table");
												children.add(tableNode);
											}
										}
										oneDBJson.put("children", children);
										twoChild.add(oneDBJson);
										
										//计数器加一
										count++;
									}
								}
								//获得三级子系统列表
								List<Sourcesystem> threeList = sourcesystemService.getAllSourcesystemsByParentId(twoSourceSystem.getId());
								if(threeList!=null){
									
									//遍历三级子系统
									for (Sourcesystem threeSourceSystem : threeList) {
										//四级列表JSONObject对象
										JSONObject threeJson = new JSONObject();
										threeJson.put("id", threeSourceSystem.getId());
										threeJson.put("label", threeSourceSystem.getName());
										threeJson.put("flag", "system");
										JSONArray threeChild = new JSONArray();
										
										//计数器加一
										count++;
										//查询三级子系统下是否有数据库，有，则查询connectinfo表获取数据库列表
										List<Connectinfo> twoDataBaseList = connectinfoService.getConnectinfoListByparentid(threeSourceSystem.getId());
										//不为空，则遍历datasource_connectinfo表，获取每个connectinfo记录对应的数据库名称
										if(twoDataBaseList!=null){
											for (Connectinfo connectinfo : twoDataBaseList) {
												//获得connectinfo表对应的datasource_connectinfo表记录
												Datasource_connectinfo datasource_connectinfo = datasource_connectinfoService.getDatasource_connectinfoListByparentid(connectinfo.getId());
												//二级数据库列表JSONObject对象
												JSONObject twoDBJson = new JSONObject();
												twoDBJson.put("id", connectinfo.getId());
												twoDBJson.put("label", datasource_connectinfo.getDatabasename());
												twoDBJson.put("flag", "database");
												JSONArray children = new JSONArray();
												List<Metadata_relationtable> metadata_relationtableList = metadata_relationtableService.getMetadata_relationtableBydatasourceid(connectinfo.getId());
												if(metadata_relationtableList!=null){
													
													for (Metadata_relationtable metadata_relationtable : metadata_relationtableList) {
														JSONObject tableNode = new JSONObject();
														tableNode.put("id", metadata_relationtable.getId());
														tableNode.put("label", metadata_relationtable.getName());
														tableNode.put("flag", "table");
														children.add(tableNode);
													}
												}
												twoDBJson.put("children", children);
												threeChild.add(twoDBJson);
												
												//计数器加一
												count++;
											}
										}
										//获得四级子系统列表
										List<Sourcesystem> fourList = sourcesystemService.getAllSourcesystemsByParentId(threeSourceSystem.getId());
										if(fourList!=null){
											
											//遍历四级子系统列表
											for (Sourcesystem fourSourceSystem : fourList) {
												//计数器加一
												count++;
												//封装数据
												JSONObject fourJson = new JSONObject();
												fourJson.put("id", fourSourceSystem.getId());
												fourJson.put("label", fourSourceSystem.getName());
												fourJson.put("flag", "system");
												threeChild.add(fourJson);
												
											}
										}
										threeJson.put("children", threeChild);
										twoChild.add(threeJson);
									}
								}
								twoJson.put("children", twoChild);
								oneChild.add(twoJson);
							}
						}
						oneJson.put("children", oneChild);
						zeroChild.add(oneJson);
					}
				}
				zeroJson.put("children", zeroChild);
				data.add(zeroJson);
			}
		}

		responsejson.put("result", true);
		responsejson.put("data", data);
		responsejson.put("count", count);
		return responsejson;
	}
	
	/**
	 * 
	 * 作者:itcoder
	 * 时间:2017年12月26日 
	 * 作用:获取业务系统下的所有数据
	 */
	@RequestMapping(value = "/getSourceSystem", method = RequestMethod.GET)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "获取源系统")
	public JSONObject getSourceSystem(HttpServletRequest request,
			HttpServletResponse response) {
		JSONObject responsejson = new JSONObject();

		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);

		try{
			JSONArray data = new JSONArray();
			
			List<Sourcesystem> list = sourcesystemService.getSourceSystem();
			
			for (Sourcesystem sourcesystem : list) {
				JSONObject json = new JSONObject();
				json.put("id", sourcesystem.getId());
				json.put("label", sourcesystem.getName());
				data.add(json);
			}
			
			responsejson.put("result", true);
			responsejson.put("data", data);
			responsejson.put("count", data.size());			
		}catch(Exception e){
			responsejson.put("result", false);
			responsejson.put("count", 0);	
		}
		return responsejson;
	}

	/**
	 * 
	 * 作者:itcoder 
	 * 时间:2017年12月4日 
	 * 作用:级联删除给定id的SourcesystemsList数据
	 * 参数:id
	 */
	@RequestMapping(value = "/deleteSourcesystem", method = RequestMethod.POST)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "级联删除给定id的SourcesystemsList数据")
	public JSONObject deleteSourcesystem(HttpServletRequest request,
			HttpServletResponse response,@RequestBody Map<String,Object> map) {
		JSONObject responsejson = new JSONObject();
		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);
		
		//判断id是否为空
		if(!map.containsKey("id")){
			responsejson.put("result", false);
			responsejson.put("count", 0);
		}
		
		//判断id是否为空字符串
		if(map.get("id").toString().equals("")){
			responsejson.put("result", false);
			responsejson.put("count", 0);
		}
		
		String idStr = map.get("id").toString();
		try {
			int id = Integer.parseInt(idStr);
			boolean result = sourcesystemService.deleteById(id);
			if(result){
				responsejson.put("result", result);
				responsejson.put("count", 1);
			}else{
				responsejson.put("result", false);
				responsejson.put("count", 0);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}		

		return responsejson;
	}
	
//	/**
//	 * 
//	 * 作者:itcoder 
//	 * 时间:2017年12月6日 
//	 * 作用:获取元数据所属的四级结构（获取四级侧边栏菜单树数据） 
//	 * 参数:
//	 */
//	@RequestMapping(value = "/getFourMetamodelHierarchyList", method = RequestMethod.GET)
//	@ResponseBody
//	@Log(operationType = "sourcesystem", operationDesc = "获取元数据所属的四级结构（获取四级侧边栏菜单树数据）  ")
//	public JSONObject getFourMetamodelHierarchyList(HttpServletRequest request,
//			HttpServletResponse response) {
//		JSONObject responsejson = new JSONObject();
//		// if(!GlobalMethodAndParams.checkLogin()){
//		// responsejson.put("result", false);
//		// responsejson.put("count",0);
//		// return responsejson;
//		// }
//		GlobalMethodAndParams.setHttpServletResponse(request, response);
//
//		JSONArray data = new JSONArray();
//		int count = 0;
//		List<Sourcesystem> sourcesystemlist = sourcesystemService
//				.getAllSourcesystems();
//		for (Sourcesystem sourcesystem : sourcesystemlist) {// 遍历数据源获得数据源的名称
//			JSONObject oneJson = new JSONObject();
//			if (sourcesystem.getParentid() == null) {// 判断是数据源还是源系统
//				
//				//etl id=7
//				count++;
//				oneJson.put("id", sourcesystem.getId());
//				oneJson.put("label", sourcesystem.getName());// 把数据源通过json封装
//
//				JSONArray child = new JSONArray();
//				JSONObject twoJson = new JSONObject();
//				List<Sourcesystem> dataSourcelist = sourcesystemService
//						.getAllSourcesystemsByParentId(sourcesystem.getId());// 获得数据源下的多个源系统
//				for (Sourcesystem dataSource : dataSourcelist) {// 遍历源系统获得源系统的名称
//					
//					//kettle数据集成  id=28
//					count++;
//					twoJson.put("id", dataSource.getId());
//					twoJson.put("label", dataSource.getName());// 把源系统通过JSON封装
//					
//					//如果DataSource==kettle数据集成
//					if(dataSource.getName().equals("kettle数据集成")){
//						JSONArray nodeArray = new JSONArray();
//						List<Integer> target_table_ids= etlJobService.queryTargetTableId();
//						for (Integer targetId : target_table_ids) {
//							count++;
//							String name = metadata_relationtableService.getMetadata_relationtableByid(targetId).getName();
//							JSONObject json = new JSONObject();
//							json.put("id", targetId);
//							json.put("label", name);
//							nodeArray.add(json);
//						}
//						twoJson.put("children", nodeArray);
//						child.add(twoJson);
//						oneJson.put("children", child);
//						data.add(oneJson);
//
//						responsejson.put("result", true);
//						responsejson.put("data", data);
//						responsejson.put("count", count);
//						return responsejson;
//					}
//					
//					JSONArray children = new JSONArray();
//					JSONObject threeJSON = new JSONObject();
//					List<Connectinfo> connectinfoList = connectinfoService
//							.getConnectinfoListByparentid(dataSource.getId());//获得源系统下的多个数据库
//					for (Connectinfo connectinfo : connectinfoList) {//遍历数据库获得数据库名称
//						
//						int parentid = connectinfo.getId();
//						List<Datasource_connectinfo> datasource_connectinfo = datasource_connectinfoService.getDatasource_connectinfoListByparentid(parentid);
//						if(datasource_connectinfo.size()==0){
//							continue;
//						}
//						int datasource_connectinfoid = datasource_connectinfo.get(0).getId();
//						List<Metadata_relationtable> metadataList = metadata_relationtableService.getMetadata_relationtableBydatasourceid(datasource_connectinfoid);
//						JSONArray children2 = new JSONArray();
//						JSONObject fourJson = new JSONObject();
//						for (Metadata_relationtable metadata_relationtable : metadataList) {
//							count++;
//							fourJson.put("id", metadata_relationtable.getId());
//							fourJson.put("label",metadata_relationtable.getName());
//							children2.add(fourJson);
//						}
//						threeJSON.put("id", connectinfo.getId());
//						threeJSON.put("label", connectinfo.getName());
//						threeJSON.put("children",children2);
//						children.add(threeJSON);
//						count++;
//					}
//					twoJson.put("children", children);
//					child.add(twoJson);
//				}
//				oneJson.put("children", child);
//				data.add(oneJson);
//			}
//		}
//
//		responsejson.put("result", true);
//		responsejson.put("data", data);
//		responsejson.put("count", count);
//		return responsejson;
//	}
	
	/**
	 * 
	 * 作者:itcoder
	 * 时间:2018年1月23日 
	 * 作用:插入一个Sourcesystem记录 
	 * 传参：id、name、desribe(可选)
	 * 
	 */
	@RequestMapping(value = "/insertSourcesystem", method = RequestMethod.POST)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "插入一个Sourcesystem记录")
	public JSONObject insertSourcesystem(HttpServletRequest request,
			HttpServletResponse response, @RequestBody Map<String, Object> map) {
		JSONObject responsejson = new JSONObject();

		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);

		// 检查传参是否正确
		if (!(map.containsKey("name") && map.containsKey("id"))) {
			responsejson.put("result", false);
			responsejson.put("count", 0);
			return responsejson;
		}
		
		//判断name,type是否为空
		if(map.get("name")==null||map.get("id")==null){
			responsejson.put("result", false);
			responsejson.put("count", 0);
			return responsejson;
		}
		
		Sourcesystem sourcesystem = new Sourcesystem();
		boolean result = false;
		try {
			String idStr = map.get("id").toString();
			Integer id = Integer.parseInt(idStr);
			sourcesystem.setParentid(id);
			sourcesystem.setName(map.get("name").toString());
			String type = sourcesystemService.getSourcesystemsById(id).getType();

			if("parent".equals(type)){
				int sourceSystemId = sourcesystemService.getSourcesystemsById(id).getId();
				if(sourceSystemId == 5){
					type = "srcsystem";
				}else if(sourceSystemId == 6){
					type = "targetsystem";
				}else if(sourceSystemId == 7){
					type = "etl";
				}
//			if(type.equals("parent")){
//				int ancestorID = -1;
//				while(sourcesystemService.getSourcesystemsById(id)!=null){
//					id = sourcesystemService.getSourcesystemsById(id).getId();
//				}
//				type = sourcesystemService.getSourcesystemsById(id).getType();


			}
			sourcesystem.setType(type);
			if (map.containsKey("describe")) {
				sourcesystem.setDesribe(map.get("describe").toString());
			}
			result = sourcesystemService.insertSourcesystem(sourcesystem);
		} catch (Exception e) {
		}

		responsejson.put("result", result);
		if (result) {
			responsejson.put("count", 1);
		} else {
			responsejson.put("count", 0);
		}
		return responsejson;
	}
	
	/**
	 * 
	 * 作者:GodDispose
	 * 时间:2017年12月14日 
	 * 作用:获取目标系统
	 */
	@RequestMapping(value = "/getTargetSystem", method = RequestMethod.GET)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "获取目标系统")
	public JSONObject getTargetSystem(HttpServletRequest request,
			HttpServletResponse response) {
		JSONObject responsejson = new JSONObject();

		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);

		try{
			List<Sourcesystem> targetSystems = sourcesystemService.getTargetSystem("targetsystem");
			JSONArray data = new JSONArray();
			for(Sourcesystem sourcesystem : targetSystems){
				JSONObject node = new JSONObject();
				node.put("id", sourcesystem.getId());
				node.put("name", sourcesystem.getName());
				data.add(node);
			}
			
			responsejson.put("result", true);
			responsejson.put("data", data);
			responsejson.put("count", data.size());			
		}catch(Exception e){
			responsejson.put("result", false);
			responsejson.put("count", 0);	
		}
		return responsejson;
	}

	/**
	 * 
	 * 作者:allen 
	 * 时间:2017年11月13日 
	 * 作用:获取分页数据(数据按id倒叙排序，新添加的在最前面)
	 * 参数:page(页码)、pageSize(每页多少行)
	 */
	@RequestMapping(value = "/getSourcesystemListByPage", method = RequestMethod.POST)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "获取分页sourcesystem数据")
	public JSONObject getSourcesystemListByPage(HttpServletRequest request,
			HttpServletResponse response, @RequestBody Map<String, Object> map) {
		JSONObject responsejson = new JSONObject();

		// if(!GlobalMethodAndParams.checkLogin()){
		// responsejson.put("result", false);
		// responsejson.put("count",0);
		// return responsejson;
		// }
		GlobalMethodAndParams.setHttpServletResponse(request, response);

		// 检查传参是否正确
		if (!(map.containsKey("page") && map.containsKey("pageSize"))) {
			responsejson.put("result", false);
			responsejson.put("count", 0);
			return responsejson;
		}

		String currPageStr = map.get("page").toString();
		String pageSizeStr = map.get("pageSize").toString();
		int currPage = 1;
		int pageSize = 1;
		try {
			currPage = Integer.parseInt(currPageStr);
			pageSize = Integer.parseInt(pageSizeStr);
		} catch (Exception e) {
		}
		// 获取总记录数
		int rowCount = sourcesystemService.getRowCount();
		// 构造分页数据
		PageParam pageParam = new PageParam();
		pageParam.setPageSize(pageSize);
		pageParam.setRowCount(rowCount);
		if (pageParam.getTotalPage() < currPage) {
			currPage = pageParam.getTotalPage();
		}
		pageParam.setCurrPage(currPage);

		pageParam = sourcesystemService.getSourcesystemListByPage(pageParam);

		responsejson.put("result", true);
		responsejson.put("data", pageParam);
		responsejson.put("count", pageParam.getDate().size());
		return responsejson;
	}

//	/**
//	 * 
//	 * 作者:itcoder 
//	 * 时间:2017年12月2日 
//	 * 作用:获取所有的Sourcesystems数据 
//	 * 参数:
//	 */
//	@RequestMapping(value = "/getAllSourcesystems", method = RequestMethod.GET)
//	@ResponseBody
//	@Log(operationType = "sourcesystem", operationDesc = "获取所有的Sourcesystems数据")
//	public JSONObject getAllSourcesystems(HttpServletRequest request,
//			HttpServletResponse response) {
//		JSONObject responsejson = new JSONObject();
//		// if(!GlobalMethodAndParams.checkLogin()){
//		// responsejson.put("result", false);
//		// responsejson.put("count",0);
//		// return responsejson;
//		// }
//		GlobalMethodAndParams.setHttpServletResponse(request, response);
//
//		List<Sourcesystem> sourcesystemlist = sourcesystemService
//				.getAllSourcesystems();
//		JSONArray data = new JSONArray();
//		for (Sourcesystem sourcesystem : sourcesystemlist) {
//			JSONObject jsonDad = new JSONObject();
//			Integer id = sourcesystem.getId();
//			String label = sourcesystem.getName();
//			jsonDad.put("id", id);
//			jsonDad.put("label", label);
//			List<Datasource_connectinfo> datasource_connectinfoList = datasource_connectinfoService
//					.getDatasource_connectinfoListByparentid(id);
//			JSONArray childrenData = new JSONArray();
//			for (Datasource_connectinfo datasource_connectinfo : datasource_connectinfoList) {
//				JSONObject jsonChild = new JSONObject();
//				Integer childId = datasource_connectinfo.getId();
//				String databaseName = datasource_connectinfo.getDatabasename();
//				jsonChild.put("id", connectinfo.getId());
//				jsonChild.put("label", databaseName);
//				childrenData.add(jsonChild);
//			}
//			jsonDad.put("children", childrenData);
//			data.add(jsonDad);
//		}
//
//		responsejson.put("result", true);
//		responsejson.put("data", data);
//		responsejson.put("count", 1);
//		return responsejson;
//	}

//	/**
//	 * 
//	 * 作者:itcoder 
//	 * 时间:2017年12月4日 
//	 * 作用:获取所有的getSourcesystemsList数据（获取三级侧边栏菜单树数据） 
//	 * 参数:
//	 */
//	@RequestMapping(value = "/getSourcesystemsList", method = RequestMethod.GET)
//	@ResponseBody
//	@Log(operationType = "sourcesystem", operationDesc = "获取所有的getSourcesystemsList数据（获取三级侧边栏菜单树数据） ")
//	public JSONObject getSourcesystemsList(HttpServletRequest request,
//			HttpServletResponse response) {
//		JSONObject responsejson = new JSONObject();
//		// if(!GlobalMethodAndParams.checkLogin()){
//		// responsejson.put("result", false);
//		// responsejson.put("count",0);
//		// return responsejson;
//		// }
//		GlobalMethodAndParams.setHttpServletResponse(request, response);
//
//		JSONArray data = new JSONArray();
//		int count = 0;
//		List<Sourcesystem> sourcesystemlist = sourcesystemService
//				.getAllSourcesystems();
//		for (Sourcesystem sourcesystem : sourcesystemlist) {// 遍历数据源获得数据源的名称
//			JSONObject oneJson = new JSONObject();
//			if (sourcesystem.getParentid() == null) {// 判断是数据源还是源系统
//				count++;
//				oneJson.put("id", sourcesystem.getId());//一级菜单对应sourcesystem表的id
//				oneJson.put("label", sourcesystem.getName());// 把数据源通过json封装
//
//				JSONArray child = new JSONArray();
//				JSONObject twoJson = new JSONObject();
//				List<Sourcesystem> dataSourcelist = sourcesystemService
//						.getAllSourcesystemsByParentId(sourcesystem.getId());// 获得数据源下的多个源系统
//				for (Sourcesystem dataSource : dataSourcelist) {// 遍历源系统获得源系统的名称
//					count++;
//					twoJson.put("id", dataSource.getId());//二级菜单对应sourcesystem表的id
//					twoJson.put("label", dataSource.getName());// 把源系统通过JSON封装
//					JSONArray children = new JSONArray();
//					JSONObject threeJSON = new JSONObject();
//					List<Connectinfo> connectinfoList = connectinfoService
//							.getConnectinfoListByparentid(dataSource.getId());//获得源系统下的多个数据库
//					for (Connectinfo connectinfo : connectinfoList) {//遍历数据库获得数据库名称
//						threeJSON.put("id", connectinfo.getId());//三级菜单对应connectinfo表的id
//						threeJSON.put("label", connectinfo.getName());
//						children.add(threeJSON);
//						count++;
//					}
//					twoJson.put("children", children);
//					child.add(twoJson);
//				}
//				oneJson.put("children", child);
//				data.add(oneJson);
//			}
//		}
//
//		responsejson.put("result", true);
//		responsejson.put("data", data);
//		responsejson.put("count", count);
//		return responsejson;
//	}

	
	/**
	 * 
	 * 作者:GodDispose 
	 * 时间:2018年1月22日 
	 * 作用:根据源系统id，获取其拥有的下一级子系统
	 * 参数:id(源系统id)
	 */
	@RequestMapping(value = "/getSourcesystemsById", method = RequestMethod.POST)
	@ResponseBody
	@Log(operationType = "sourcesystem", operationDesc = "根据源系统id，获取其拥有的下一级子系统 ")
	public JSONObject getSourcesystemsById(HttpServletRequest request,
			HttpServletResponse response, @RequestBody Map<String, Object> map) {
		JSONObject responsejson = new JSONObject();
		//判断id是否为空
		if(!map.containsKey("id")){
			responsejson.put("result", false);
			responsejson.put("count", 0);
		}
		
		//判断id是否为空字符串
		if(map.get("id").toString().equals("")){
			responsejson.put("result", false);
			responsejson.put("count", 0);
		}
		
		String idStr = map.get("id").toString();
		try {
			int id = Integer.parseInt(idStr);
			List<Sourcesystem> allSourcesystems = sourcesystemService.getAllSourcesystemsByParentId(id);
			JSONArray data = new JSONArray();
			for(Sourcesystem sourcesystem : allSourcesystems){
				JSONObject node = new JSONObject();
				node.put("id", sourcesystem.getId());
				node.put("name", sourcesystem.getName());
				data.add(node);
			}
			responsejson.put("result", true);
			responsejson.put("data", data);
			responsejson.put("count", data.size());
			
		} catch (Exception e) {
			e.printStackTrace();
			responsejson.put("result", false);
			responsejson.put("count", 0);
		}		

		return responsejson;
	}
	
}
